//import android.Manifest;
//import android.annotation.SuppressLint;
//import android.bluetooth.BluetoothAdapter;
//import android.bluetooth.BluetoothDevice;
//import android.bluetooth.BluetoothSocket;
//import android.content.Context;
//import android.content.pm.PackageManager;
//import android.graphics.Bitmap;
//import android.graphics.Canvas;
//import android.graphics.Color;
//import android.graphics.Paint;
//import android.graphics.Typeface;
//import android.os.AsyncTask;
//import android.os.Bundle;
//import android.util.Log;
//import android.view.View;
//import android.widget.ArrayAdapter;
//import android.widget.Button;
//import android.widget.EditText;
//import android.widget.ImageView;
//import android.widget.Spinner;
//import android.widget.TextView;
//import android.widget.Toast;
//import androidx.appcompat.app.AppCompatActivity;
//import androidx.core.app.ActivityCompat;
//import androidx.core.content.ContextCompat;
//import com.google.zxing.BarcodeFormat;
//import com.google.zxing.MultiFormatWriter;
//import com.google.zxing.common.BitMatrix;
//
//import java.io.IOException;
//import java.io.OutputStream;
//import java.lang.reflect.Method;
//import java.nio.charset.Charset;
//import java.util.ArrayList;
//import java.util.Set;
//import java.util.UUID;
//
//public class MainActivity extends AppCompatActivity {
//
//    private static final String TAG = "BluetoothPrint";
//    private static final int REQUEST_BLUETOOTH_PERMISSION = 1;
//    private static final UUID SPP_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
//
//    private BluetoothAdapter bluetoothAdapter;
//    private BluetoothDevice selectedPrinter;
//    private BluetoothSocket bluetoothSocket;
//    private OutputStream outputStream;
//
//    private Spinner printerSpinner;
//    private EditText contentInput;
//    private EditText titleInput;
//    private EditText footerInput;
//    private EditText offsetInput; // 新增偏移量输入框
//    private Button scanButton;
//    private Button previewButton;
//    private Button printButton;
//    private ImageView previewImage;
//    private TextView statusText;
//
//    private ArrayAdapter<String> printerAdapter;
//    private ArrayList<BluetoothDevice> printerDevices = new ArrayList<>();
//
//    // 使用GBK编码
//    private static final Charset GBK_CHARSET = Charset.forName("GBK");
//
//    @Override
//    protected void onCreate(Bundle savedInstanceState) {
//        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_main);
//
//        // 初始化视图
//        initViews();
//
//        // 检查并请求权限
//        checkPermissions();
//
//        // 初始化蓝牙适配器
//        initBluetoothAdapter();
//    }
//
//    private void initViews() {
//        printerSpinner = findViewById(R.id.printerSpinner);
//        contentInput = findViewById(R.id.contentInput);
//        titleInput = findViewById(R.id.titleInput);
//        footerInput = findViewById(R.id.footerInput);
//        offsetInput = findViewById(R.id.offsetInput); // 偏移量输入框
//        scanButton = findViewById(R.id.scanButton);
//        previewButton = findViewById(R.id.previewButton);
//        printButton = findViewById(R.id.printButton);
//        previewImage = findViewById(R.id.previewImage);
//        statusText = findViewById(R.id.statusText);
//
//        // 设置默认值
//        contentInput.setText("https://example.com");
//        titleInput.setText("公司二维码");
//        footerInput.setText("扫描二维码访问官网");
//        offsetInput.setText("5"); // 默认偏移5个字符
//
//        // 初始化打印机适配器
//        printerAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item);
//        printerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//        printerSpinner.setAdapter(printerAdapter);
//
//        // 设置按钮事件
//        scanButton.setOnClickListener(v -> scanBluetoothPrinters());
//        previewButton.setOnClickListener(v -> previewQrCode());
//        printButton.setOnClickListener(v -> printQrCode());
//    }
//
//    private void checkPermissions() {
//        if (ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT)
//                != PackageManager.PERMISSION_GRANTED) {
//
//            ActivityCompat.requestPermissions(this,
//                    new String[]{
//                            Manifest.permission.BLUETOOTH_CONNECT,
//                            Manifest.permission.BLUETOOTH_SCAN,
//                            Manifest.permission.ACCESS_FINE_LOCATION
//                    },
//                    REQUEST_BLUETOOTH_PERMISSION);
//        }
//    }
//
//    @Override
//    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
//        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
//        if (requestCode == REQUEST_BLUETOOTH_PERMISSION) {
//            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//                scanBluetoothPrinters();
//            } else {
//                statusText.setText("需要蓝牙权限才能扫描打印机");
//            }
//        }
//    }
//
//    private void initBluetoothAdapter() {
//        bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
//        if (bluetoothAdapter == null) {
//            statusText.setText("设备不支持蓝牙");
//            disableControls();
//        } else if (!bluetoothAdapter.isEnabled()) {
//            statusText.setText("请先启用蓝牙");
//        }
//    }
//
//    private void scanBluetoothPrinters() {
//        if (bluetoothAdapter == null) {
//            statusText.setText("蓝牙不可用");
//            return;
//        }
//
//        // 确保蓝牙已开启
//        if (!bluetoothAdapter.isEnabled()) {
//            statusText.setText("请先启用蓝牙");
//            return;
//        }
//
//        // 检查权限
//        if (ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT)
//                != PackageManager.PERMISSION_GRANTED) {
//            checkPermissions();
//            return;
//        }
//
//        // 获取已配对的设备
//        Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
//        printerDevices.clear();
//        printerAdapter.clear();
//
//        if (pairedDevices.size() > 0) {
//            for (BluetoothDevice device : pairedDevices) {
//                if (device.getName() != null) {
//                    printerDevices.add(device);
//                    printerAdapter.add(device.getName() + "\n" + device.getAddress());
//                }
//            }
//            statusText.setText("找到 " + printerDevices.size() + " 台打印机");
//        } else {
//            printerAdapter.add("未找到已配对的打印机");
//            statusText.setText("未找到已配对的打印机");
//        }
//        printerAdapter.notifyDataSetChanged();
//    }
//
//    private void previewQrCode() {
//        String content = contentInput.getText().toString().trim();
//        String title = titleInput.getText().toString().trim();
//
//        if (content.isEmpty()) {
//            Toast.makeText(this, "请输入二维码内容", Toast.LENGTH_SHORT).show();
//            return;
//        }
//
//        try {
//            Bitmap qrWithTitle = createQrCodeWithTitle(content, title, 400);
//            previewImage.setImageBitmap(qrWithTitle);
//            previewImage.setVisibility(View.VISIBLE);
//            statusText.setText("二维码预览已生成");
//        } catch (Exception e) {
//            statusText.setText("生成二维码失败: " + e.getMessage());
//            Log.e(TAG, "生成二维码失败", e);
//        }
//    }
//
//    private void printQrCode() {
//        int selectedPosition = printerSpinner.getSelectedItemPosition();
//        if (selectedPosition < 0 || selectedPosition >= printerDevices.size()) {
//            Toast.makeText(this, "请选择打印机", Toast.LENGTH_SHORT).show();
//            return;
//        }
//
//        String content = contentInput.getText().toString().trim();
//        String title = titleInput.getText().toString().trim();
//        String footer = footerInput.getText().toString().trim();
//
//        if (content.isEmpty()) {
//            Toast.makeText(this, "请输入二维码内容", Toast.LENGTH_SHORT).show();
//            return;
//        }
//
//        selectedPrinter = printerDevices.get(selectedPosition);
//        statusText.setText("正在连接打印机...");
//        printButton.setEnabled(false);
//
//        // 在后台执行打印任务
//        new PrintTask().execute(content, title, footer);
//    }
//
//    private Bitmap createQrCodeWithTitle(String content, String title, int size) throws Exception {
//        // 生成二维码
//        BitMatrix matrix = new MultiFormatWriter().encode(
//                content,
//                BarcodeFormat.QR_CODE,
//                size,
//                size
//        );
//        Bitmap qrBitmap = bitMatrixToBitmap(matrix);
//
//        // 创建带标题的完整图片
//        int titleHeight = title.isEmpty() ? 0 : 60; // 标题区域高度
//        int padding = 20; // 内边距
//
//        // 创建新画布（二维码高度 + 标题高度）
//        Bitmap result = Bitmap.createBitmap(
//                size,
//                size + titleHeight,
//                Bitmap.Config.ARGB_8888
//        );
//        Canvas canvas = new Canvas(result);
//
//        // 绘制白色背景
//        canvas.drawColor(Color.WHITE);
//
//        // 绘制标题（如果有）
//        if (!title.isEmpty()) {
//            Paint titlePaint = new Paint();
//            titlePaint.setColor(Color.BLACK);
//            titlePaint.setTextSize(36);
//            titlePaint.setTypeface(Typeface.DEFAULT_BOLD);
//            titlePaint.setTextAlign(Paint.Align.CENTER);
//
//            // 计算标题位置
//            float titleX = size / 2f;
//            float titleY = titleHeight - padding;
//            canvas.drawText(title, titleX, titleY, titlePaint);
//        }
//
//        // 绘制二维码
//        canvas.drawBitmap(qrBitmap, 0, titleHeight, null);
//
//        return result;
//    }
//
//    private Bitmap bitMatrixToBitmap(BitMatrix matrix) {
//        int width = matrix.getWidth();
//        int height = matrix.getHeight();
//        Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
//
//        for (int x = 0; x < width; x++) {
//            for (int y = 0; y < height; y++) {
//                bitmap.setPixel(x, y, matrix.get(x, y) ? Color.BLACK : Color.WHITE);
//            }
//        }
//        return bitmap;
//    }
//
//    private void disableControls() {
//        scanButton.setEnabled(false);
//        previewButton.setEnabled(false);
//        printButton.setEnabled(false);
//    }
//
//    @SuppressLint("StaticFieldLeak")
//    private class PrintTask extends AsyncTask<String, Void, String> {
//
//        @Override
//        protected String doInBackground(String... params) {
//            String content = params[0];
//            String title = params[1];
//            String footer = params[2]; // 页脚文本
//
//            try {
//                // 1. 生成二维码图片
//                Bitmap qrWithTitle = createQrCodeWithTitle(content, title, 300);
//
//                // 2. 连接打印机
//                connectToPrinter();
//
//                // 3. 发送打印指令
//                printContent(qrWithTitle, footer);
//
//                // 4. 关闭连接
//                disconnectPrinter();
//
//                return "打印成功";
//            } catch (Exception e) {
//                Log.e(TAG, "打印失败", e);
//                return "打印失败: " + e.getMessage();
//            }
//        }
//
//        @Override
//        protected void onPostExecute(String result) {
//            statusText.setText(result);
//            printButton.setEnabled(true);
//        }
//
//        private void connectToPrinter() throws IOException {
//            try {
//                // 反射绕过配对确认（如果尚未配对）
//                Method m = selectedPrinter.getClass().getMethod("createRfcommSocket", int.class);
//                bluetoothSocket = (BluetoothSocket) m.invoke(selectedPrinter, 1);
//            } catch (Exception e) {
//                bluetoothSocket = selectedPrinter.createRfcommSocketToServiceRecord(SPP_UUID);
//            }
//
//            bluetoothSocket.connect();
//            outputStream = bluetoothSocket.getOutputStream();
//        }
//
//        private void disconnectPrinter() throws IOException {
//            if (outputStream != null) {
//                outputStream.close();
//                outputStream = null;
//            }
//            if (bluetoothSocket != null) {
//                bluetoothSocket.close();
//                bluetoothSocket = null;
//            }
//        }
//
//        private void printContent(Bitmap bitmap, String footer) throws IOException {
//            // 1. 打印机初始化
//            outputStream.write(new byte[]{0x1B, 0x40});
//
//            // 2. 设置GBK编码
//            setGbkEncoding();
//
//            // 3. 打印页眉文本
//            printText("二维码打印\n\n", true, false);
//
//            // 4. 打印二维码图片
//            printBitmap(bitmap);
//
//            // 5. 打印页脚文本
//            if (footer != null && !footer.isEmpty()) {
//                // 向右偏移5个字符位置打印页脚
//                printTextWithOffset(footer, 5, false, true);
//            }
//
//            // 6. 添加换行和切纸
//            outputStream.write(new byte[]{0x0A, 0x0A}); // 换行
//            outputStream.write(new byte[]{0x1D, 0x56, 0x42, 0x00}); // 切纸
//            outputStream.flush();
//        }
//
//        // 设置GBK编码的关键方法
//        private void setGbkEncoding() throws IOException {
//            try {
//                // 使用标准ESC/POS指令设置GBK编码
//                outputStream.write(new byte[]{0x1B, 0x74, 0x0F});
//            } catch (Exception e) {
//                Log.w(TAG, "标准GBK设置指令失败");
//            }
//        }
//
//        // 打印文本内容（使用GBK编码）
//        private void printText(String text, boolean centered, boolean large) throws IOException {
//            // 设置文本样式
//            if (centered) {
//                outputStream.write(new byte[]{0x1B, 0x61, 0x01}); // 居中
//            } else {
//                outputStream.write(new byte[]{0x1B, 0x61, 0x00}); // 左对齐
//            }
//
//            if (large) {
//                // 双倍宽高
//                outputStream.write(new byte[]{0x1D, 0x21, 0x11});
//            }
//
//            // 转换为GBK字节数组并发送
//            byte[] textBytes = text.getBytes(GBK_CHARSET);
//            outputStream.write(textBytes);
//
//            // 重置样式
//            if (large) {
//                outputStream.write(new byte[]{0x1D, 0x21, 0x00}); // 正常大小
//            }
//        }
//
//        // 打印文本内容（向右偏移指定字符数）
//        private void printTextWithOffset(String text, int offset, boolean centered, boolean large) throws IOException {
//            // 计算偏移量（每个字符约12点）
//            int dotOffset = offset * 12;
//
//            // 设置绝对位置
//            setAbsolutePosition(dotOffset);
//
//            // 打印文本
//            printText(text, centered, large);
//        }
//
//        // 设置绝对打印位置（以点为单位）
//        private void setAbsolutePosition(int position) throws IOException {
//            // ESC $ - 设置绝对打印位置
//            // position: 0 ≤ position ≤ 65535 (点)
//            outputStream.write(0x1B); // ESC
//            outputStream.write(0x24); // $
//
//            // 位置参数（低位在前，高位在后）
//            int nL = position % 256;
//            int nH = position / 256;
//
//            outputStream.write(nL); // nL
//            outputStream.write(nH); // nH
//        }
//
//        // 打印位图
//        private void printBitmap(Bitmap bitmap) throws IOException {
//            // 设置行间距为0
//            outputStream.write(new byte[]{0x1B, 0x33, 0x00});
//
//            // 光栅位图模式
//            int width = bitmap.getWidth();
//            int height = bitmap.getHeight();
//
//            // 确保宽度是8的倍数
//            int newWidth = (width + 7) / 8 * 8;
//
//            // 发送GS v 0命令
//            outputStream.write(0x1D); // GS
//            outputStream.write(0x76); // v
//            outputStream.write(0x30); // 0
//            outputStream.write(0x00); // m=0
//            outputStream.write((newWidth / 8) & 0xFF); // xL
//            outputStream.write((newWidth / 8) >> 8);   // xH
//            outputStream.write(height & 0xFF);        // yL
//            outputStream.write(height >> 8);           // yH
//
//            // 发送位图数据
//            for (int y = 0; y < height; y++) {
//                for (int x = 0; x < newWidth; x += 8) {
//                    byte slice = 0;
//                    for (int b = 0; b < 8; b++) {
//                        int px = x + b;
//                        int py = y;
//
//                        int pixel;
//                        if (px < width) {
//                            pixel = bitmap.getPixel(px, py);
//                        } else {
//                            pixel = Color.WHITE; // 填充白色
//                        }
//
//                        // 如果像素是深色（非白色），设置为1
//                        if (Color.red(pixel) < 128 && Color.green(pixel) < 128 && Color.blue(pixel) < 128) {
//                            slice |= (byte) (1 << (7 - b));
//                        }
//                    }
//                    outputStream.write(slice);
//                }
//            }
//
//            // 恢复行间距
//            outputStream.write(new byte[]{0x1B, 0x32});
//        }
//    }
//}